🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / app / src / main / java / com / geeksville / mesh / MainActivity.kt
Displaying Raw • Download
app/src/main/java/com/geeksville/mesh/MainActivity.kt 1c3784235e7e20ed88e054097d2e7addbff92dc3 (1c378423) Text, 7.48 KB
T8b949e/*
* Copyright (c) 2025 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787com.geeksville.mesh
Tff7b72import T7ee787android.app.PendingIntent
Tff7b72import T7ee787android.app.TaskStackBuilder
Tff7b72import T7ee787android.content.Intent
Tff7b72import T7ee787android.graphics.Color
Tff7b72import T7ee787android.hardware.usb.UsbManager
Tff7b72import T7ee787android.net.Uri
Tff7b72import T7ee787android.os.Build
Tff7b72import T7ee787android.os.Bundle
Tff7b72import T7ee787androidx.activity.SystemBarStyle
Tff7b72import T7ee787androidx.activity.compose.setContent
Tff7b72import T7ee787androidx.activity.enableEdgeToEdge
Tff7b72import T7ee787androidx.activity.viewModels
Tff7b72import T7ee787androidx.appcompat.app.AppCompatActivity
Tff7b72import T7ee787androidx.appcompat.app.AppCompatDelegate
Tff7b72import T7ee787androidx.compose.foundation.isSystemInDarkTheme
Tff7b72import T7ee787androidx.compose.runtime.SideEffect
Tff7b72import T7ee787androidx.compose.runtime.collectAsState
Tff7b72import T7ee787androidx.compose.runtime.getValue
Tff7b72import T7ee787androidx.compose.ui.platform.LocalView
Tff7b72import T7ee787androidx.core.net.toUri
Tff7b72import T7ee787androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
Tff7b72import T7ee787androidx.lifecycle.compose.collectAsStateWithLifecycle
Tff7b72import T7ee787androidx.lifecycle.lifecycleScope
Tff7b72import T7ee787com.geeksville.mesh.model.UIViewModel
Tff7b72import T7ee787com.geeksville.mesh.ui.MainScreen
Tff7b72import T7ee787dagger.hilt.android.AndroidEntryPoint
Tff7b72import T7ee787kotlinx.coroutines.launch
Tff7b72import T7ee787org.meshtastic.core.datastore.UiPreferencesDataSource
Tff7b72import T7ee787org.meshtastic.core.navigation.DEEP_LINK_BASE_URI
Tff7b72import T7ee787org.meshtastic.core.strings.Res
Tff7b72import T7ee787org.meshtastic.core.strings.channel_invalid
Tff7b72import T7ee787org.meshtastic.core.strings.contact_invalid
Tff7b72import T7ee787org.meshtastic.core.ui.theme.AppTheme
Tff7b72import T7ee787org.meshtastic.core.ui.theme.MODE_DYNAMIC
Tff7b72import T7ee787org.meshtastic.core.ui.util.showToast
Tff7b72import T7ee787org.meshtastic.feature.intro.AppIntroductionScreen
Tff7b72import T7ee787timber.log.Timber
Tff7b72import T7ee787javax.inject.Inject
Tf0883e@AndroidEntryPoint
Tff7b72class T56d364MainActivity Tb4b4b4: Te6edf3AppCompatActivityTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3modelTb4b4b4: Te6edf3UIViewModel Tff7b72by Te6edf3viewModelsTb4b4b4(Tb4b4b4)
T8b949e// This is aware of the Activity lifecycle and handles binding to the mesh service.
Tf0883e@Inject Tff7b72internal Tff7b72lateinit Tff7b72var Te6edf3meshServiceClientTb4b4b4: Te6edf3MeshServiceClient
Tf0883e@Inject Tff7b72internal Tff7b72lateinit Tff7b72var Te6edf3uiPreferencesDataSourceTb4b4b4: Te6edf3UiPreferencesDataSource
Tff7b72override Tff7b72fun Td2a8ffonCreateTb4b4b4(Te6edf3savedInstanceStateTb4b4b4: Te6edf3Bundle?Tb4b4b4) Tb4b4b4{
Te6edf3installSplashScreenTb4b4b4(Tb4b4b4)
Te6edf3enableEdgeToEdgeTb4b4b4(
T8b949e// Disable three-button navbar scrim on pre-Q devices
Te6edf3navigationBarStyle Tff7b72= Te6edf3SystemBarStyleTb4b4b4.Te6edf3autoTb4b4b4(Te6edf3ColorTb4b4b4.Te6edf3TRANSPARENTTb4b4b4, Te6edf3ColorTb4b4b4.Te6edf3TRANSPARENTTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INT Tff7b72>Tff7b72= Te6edf3BuildTb4b4b4.Te6edf3VERSION_CODESTb4b4b4.Te6edf3QTb4b4b4) Tb4b4b4{
T8b949e// Disable three-button navbar scrim
Te6edf3windowTb4b4b4.Te6edf3setNavigationBarContrastEnforcedTb4b4b4(Tff7b72falseTb4b4b4)
Tb4b4b4}
Tff7b72superTb4b4b4.Te6edf3onCreateTb4b4b4(Te6edf3savedInstanceStateTb4b4b4)
Te6edf3setContent Tb4b4b4{
Tff7b72val Te6edf3theme Tff7b72by Te6edf3modelTb4b4b4.Te6edf3themeTb4b4b4.Te6edf3collectAsStateTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3dynamic Tff7b72= Te6edf3theme Tff7b72=Tff7b72= Te6edf3MODE_DYNAMIC
Tff7b72val Te6edf3dark Tff7b72=
Tff7b72when Tb4b4b4(Te6edf3themeTb4b4b4) Tb4b4b4{
Te6edf3AppCompatDelegateTb4b4b4.Te6edf3MODE_NIGHT_YES Tff7b72-Tff7b72> Tff7b72true
Te6edf3AppCompatDelegateTb4b4b4.Te6edf3MODE_NIGHT_NO Tff7b72-Tff7b72> Tff7b72false
Te6edf3AppCompatDelegateTb4b4b4.Te6edf3MODE_NIGHT_FOLLOW_SYSTEM Tff7b72-Tff7b72> Te6edf3isSystemInDarkThemeTb4b4b4(Tb4b4b4)
Tff7b72else Tff7b72-Tff7b72> Te6edf3isSystemInDarkThemeTb4b4b4(Tb4b4b4)
Tb4b4b4}
Te6edf3AppThemeTb4b4b4(Te6edf3dynamicColor Tff7b72= Tff7b72dynamicTb4b4b4, Te6edf3darkTheme Tff7b72= Te6edf3darkTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3view Tff7b72= Te6edf3LocalViewTb4b4b4.Te6edf3current
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3viewTb4b4b4.Te6edf3isInEditModeTb4b4b4) Tb4b4b4{
Te6edf3SideEffect Tb4b4b4{ Te6edf3AppCompatDelegateTb4b4b4.Te6edf3setDefaultNightModeTb4b4b4(Te6edf3themeTb4b4b4) Tb4b4b4}
Tb4b4b4}
Tff7b72val Te6edf3appIntroCompleted Tff7b72by Te6edf3modelTb4b4b4.Te6edf3appIntroCompletedTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3appIntroCompletedTb4b4b4) Tb4b4b4{
Te6edf3MainScreenTb4b4b4(Te6edf3uIViewModel Tff7b72= Te6edf3modelTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3AppIntroductionScreenTb4b4b4(Te6edf3onDone Tff7b72= Tb4b4b4{ Te6edf3modelTb4b4b4.Te6edf3onAppIntroCompletedTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Te6edf3handleIntentTb4b4b4(Te6edf3intentTb4b4b4)
Tb4b4b4}
Tff7b72override Tff7b72fun Td2a8ffonNewIntentTb4b4b4(Te6edf3intentTb4b4b4: Te6edf3IntentTb4b4b4) Tb4b4b4{
Tff7b72superTb4b4b4.Te6edf3onNewIntentTb4b4b4(Te6edf3intentTb4b4b4)
Te6edf3handleIntentTb4b4b4(Te6edf3intentTb4b4b4)
Tb4b4b4}
Tff7b72private Tff7b72fun Td2a8ffhandleIntentTb4b4b4(Te6edf3intentTb4b4b4: Te6edf3IntentTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3appLinkAction Tff7b72= Te6edf3intentTb4b4b4.Te6edf3action
Tff7b72val Te6edf3appLinkDataTb4b4b4: Te6edf3Uri? Tff7b72= Te6edf3intentTb4b4b4.Te6edf3data
Tff7b72when Tb4b4b4(Te6edf3appLinkActionTb4b4b4) Tb4b4b4{
Te6edf3IntentTb4b4b4.Te6edf3ACTION_VIEW Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3appLinkDataTff7b72?.Te6edf3let Tb4b4b4{
Te6edf3TimberTb4b4b4.Te6edf3dTb4b4b4(Ta5d6ff"Ta5d6ffApp link data: Tffd700$Te6edf3itTa5d6ff"Tb4b4b4)
Tff7b72if Tb4b4b4(Tffa657itTb4b4b4.Te6edf3pathTff7b72?.Te6edf3startsWithTb4b4b4(Ta5d6ff"Ta5d6ff/e/Ta5d6ff"Tb4b4b4) Tff7b72=Tff7b72= Tff7b72true Tff7b72|Tff7b72| Tffa657itTb4b4b4.Te6edf3pathTff7b72?.Te6edf3startsWithTb4b4b4(Ta5d6ff"Ta5d6ff/E/Ta5d6ff"Tb4b4b4) Tff7b72=Tff7b72= Tff7b72trueTb4b4b4) Tb4b4b4{
Te6edf3TimberTb4b4b4.Te6edf3dTb4b4b4(Ta5d6ff"Ta5d6ffApp link data is a channel setTa5d6ff"Tb4b4b4)
Te6edf3modelTb4b4b4.Te6edf3requestChannelUrlTb4b4b4(
Te6edf3url Tff7b72= Tffa657itTb4b4b4,
Te6edf3onFailure Tff7b72= Tb4b4b4{ Te6edf3lifecycleScopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3showToastTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3channel_invalidTb4b4b4) Tb4b4b4} Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Tffa657itTb4b4b4.Te6edf3pathTff7b72?.Te6edf3startsWithTb4b4b4(Ta5d6ff"Ta5d6ff/v/Ta5d6ff"Tb4b4b4) Tff7b72=Tff7b72= Tff7b72true Tff7b72|Tff7b72| Tffa657itTb4b4b4.Te6edf3pathTff7b72?.Te6edf3startsWithTb4b4b4(Ta5d6ff"Ta5d6ff/V/Ta5d6ff"Tb4b4b4) Tff7b72=Tff7b72= Tff7b72trueTb4b4b4) Tb4b4b4{
Te6edf3TimberTb4b4b4.Te6edf3dTb4b4b4(Ta5d6ff"Ta5d6ffApp link data is a shared contactTa5d6ff"Tb4b4b4)
Te6edf3modelTb4b4b4.Te6edf3setSharedContactRequestedTb4b4b4(
Te6edf3url Tff7b72= Tffa657itTb4b4b4,
Te6edf3onFailure Tff7b72= Tb4b4b4{ Te6edf3lifecycleScopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3showToastTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3contact_invalidTb4b4b4) Tb4b4b4} Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3TimberTb4b4b4.Te6edf3dTb4b4b4(Ta5d6ff"Ta5d6ffApp link data is not a channel setTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Te6edf3UsbManagerTb4b4b4.Te6edf3ACTION_USB_DEVICE_ATTACHED Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3TimberTb4b4b4.Te6edf3dTb4b4b4(Ta5d6ff"Ta5d6ffUSB device attachedTa5d6ff"Tb4b4b4)
Te6edf3showSettingsPageTb4b4b4(Tb4b4b4)
Tb4b4b4}
Te6edf3IntentTb4b4b4.Te6edf3ACTION_MAIN Tff7b72-Tff7b72> Tb4b4b4{Tb4b4b4}
Te6edf3IntentTb4b4b4.Te6edf3ACTION_SEND Tff7b72-Tff7b72> Tb4b4b4{
Tff7b72val Te6edf3text Tff7b72= Te6edf3intentTb4b4b4.Te6edf3getStringExtraTb4b4b4(Te6edf3IntentTb4b4b4.Te6edf3EXTRA_TEXTTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3text Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3createShareIntentTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4.Te6edf3sendTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72else Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3TimberTb4b4b4.Te6edf3wTb4b4b4(Ta5d6ff"Ta5d6ffUnexpected action Tffd700$Te6edf3appLinkActionTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72private Tff7b72fun Td2a8ffcreateShareIntentTb4b4b4(Te6edf3messageTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Te6edf3PendingIntent Tb4b4b4{
Tff7b72val Te6edf3deepLink Tff7b72= Ta5d6ff"Tffd700$Te6edf3DEEP_LINK_BASE_URITa5d6ff/share?message=Tffd700$Te6edf3messageTa5d6ff"
Tff7b72val Te6edf3startActivityIntent Tff7b72=
Te6edf3IntentTb4b4b4(Te6edf3IntentTb4b4b4.Te6edf3ACTION_VIEWTb4b4b4, Te6edf3deepLinkTb4b4b4.Te6edf3toUriTb4b4b4(Tb4b4b4)Tb4b4b4, Tff7b72thisTb4b4b4, Te6edf3MainActivityTff7b72::Te6edf3classTb4b4b4.Te6edf3javaTb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3flags Tff7b72= Te6edf3IntentTb4b4b4.Te6edf3FLAG_ACTIVITY_SINGLE_TOP
Tb4b4b4}
Tff7b72val Te6edf3resultPendingIntentTb4b4b4: Te6edf3PendingIntent? Tff7b72=
Te6edf3TaskStackBuilderTb4b4b4.Te6edf3createTb4b4b4(Tff7b72thisTb4b4b4)Tb4b4b4.Te6edf3run Tb4b4b4{
Te6edf3addNextIntentWithParentStackTb4b4b4(Te6edf3startActivityIntentTb4b4b4)
Te6edf3getPendingIntentTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3PendingIntentTb4b4b4.Te6edf3FLAG_IMMUTABLETb4b4b4)
Tb4b4b4}
Tff7b72return Te6edf3resultPendingIntentTff7b72!!
Tb4b4b4}
Tff7b72private Tff7b72fun Td2a8ffcreateSettingsIntentTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3PendingIntent Tb4b4b4{
Tff7b72val Te6edf3deepLink Tff7b72= Ta5d6ff"Tffd700$Te6edf3DEEP_LINK_BASE_URITa5d6ff/connectionsTa5d6ff"
Tff7b72val Te6edf3startActivityIntent Tff7b72=
Te6edf3IntentTb4b4b4(Te6edf3IntentTb4b4b4.Te6edf3ACTION_VIEWTb4b4b4, Te6edf3deepLinkTb4b4b4.Te6edf3toUriTb4b4b4(Tb4b4b4)Tb4b4b4, Tff7b72thisTb4b4b4, Te6edf3MainActivityTff7b72::Te6edf3classTb4b4b4.Te6edf3javaTb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3flags Tff7b72= Te6edf3IntentTb4b4b4.Te6edf3FLAG_ACTIVITY_SINGLE_TOP
Tb4b4b4}
Tff7b72val Te6edf3resultPendingIntentTb4b4b4: Te6edf3PendingIntent? Tff7b72=
Te6edf3TaskStackBuilderTb4b4b4.Te6edf3createTb4b4b4(Tff7b72thisTb4b4b4)Tb4b4b4.Te6edf3run Tb4b4b4{
Te6edf3addNextIntentWithParentStackTb4b4b4(Te6edf3startActivityIntentTb4b4b4)
Te6edf3getPendingIntentTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3PendingIntentTb4b4b4.Te6edf3FLAG_IMMUTABLETb4b4b4)
Tb4b4b4}
Tff7b72return Te6edf3resultPendingIntentTff7b72!!
Tb4b4b4}
Tff7b72private Tff7b72fun Td2a8ffshowSettingsPageTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3createSettingsIntentTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sendTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.06s